library(tidyverse)
library(ggplot2)
library(plotly)
library(gridExtra)
library(boot)



# Colorblind-friendly palette, found at 
# http://www.cookbook-r.com/Graphs/Colors_(ggplot2)/#a-colorblind-friendly-palette

cbbPalette <- c("#E69F00", "#56B4E9", "#009E73", "#F0E442", "#0072B2", "#D55E00", "#CC79A7")

df <- read.csv('a3 csv values.csv')

labelConversion <- setNames(c("Bar", "Pie", "L", "H", "S"),
                            c("Bar Chart", "Pie Chart", "Luminance", "Hue", "Saturation"))

summaryBarAndPiePlot <- ggplot(df, aes(x = reorder(testType,error), error, fill=testType)) +
  stat_summary(fun = mean, geom = "bar") +
  stat_summary(fun.data = mean_cl_normal, geom = "errorbar", fun.args = list(mult = 1)) +
  ggtitle("Mean Error for all Visualization Types") +
  xlab("Visualization Type") +
  theme(plot.title = element_text(hjust = 0.5),
        legend.position = "none") +
  scale_fill_manual(values=cbbPalette) +
  scale_x_discrete(breaks = c("Bar", "Pie", "L", "H", "S"),
                   labels = c("Bar Chart", "Pie Chart", "Luminance", "Hue", "Saturation"))

print(htmltools::tagList(ggplotly(summaryBarAndPiePlot, tooltip = c("y"))))
NULL
summaryBoxPlot <- ggplot(df, aes(x=reorder(testType,error), y=error, fill=testType)) +
                  geom_boxplot() +
                  ggtitle("Box Plot of Error for all Visualization Types") +
                  xlab("Visualization Type") +
                  theme(plot.title = element_text(hjust = 0.5),
                        legend.position = "none") +
                  scale_fill_manual(values=cbbPalette) +
                  scale_x_discrete(breaks = c("Bar", "Pie", "L", "H", "S"),
                                   labels = c("Bar Chart", "Pie Chart", "Luminance", "Hue",    "Saturation"))

print(htmltools::tagList(ggplotly(summaryBoxPlot)))
NULL
summaryDensityPlot <- ggplot(df, aes(x=error, color=testType)) + 
  geom_density() +
  ggtitle("Distribution of Error for all Visualization Types") +
  scale_color_manual(values= c("#E69F00", "#F0E442", "#009E73", "#0072B2", "#56B4E9"),
                     labels = c("Bar Chart", "Pie Chart", "Luminance", "Hue", "Saturation")) +
  guides(color=guide_legend(title="Visualization Type")) +
  theme(plot.title = element_text(hjust = 0.5))


summaryDensityPlot


for (uniqueID in unique(df$userID)) {

  userDF <- subset(df, subset = userID == uniqueID)
  
  if (nrow(userDF) >= 25) {
  
    userSummaryPlot <- ggplot(userDF, aes(x=reorder(testType,error), y=error, fill=testType)) +
    stat_summary(fun = mean, geom = "bar") +
    stat_summary(fun.data = mean_cl_normal, geom = "errorbar", fun.args = list(mult = 1)) +
    ggtitle(paste("Error Summary for User", uniqueID, sep = " ")) +
    xlab("Chart Type") +
    theme(plot.title = element_text(hjust = 0.5),
          legend.position = "none") +
    scale_color_manual(values=cbbPalette) +
    scale_x_discrete(breaks = c("Bar", "Pie", "L", "H", "S"),
                                   labels = c("Bar Chart", "Pie Chart", "Luminance", "Hue",    "Saturation"))
  
    print(htmltools::tagList(ggplotly(userSummaryPlot, tooltip=c("y"))))
    
  }
}
NA
LS0tDQp0aXRsZTogIkVycm9yIEFuYWx5c2lzIg0Kb3V0cHV0OiBodG1sX25vdGVib29rDQotLS0NCg0KYGBge3J9DQpsaWJyYXJ5KHRpZHl2ZXJzZSkNCmxpYnJhcnkoZ2dwbG90MikNCmxpYnJhcnkocGxvdGx5KQ0KbGlicmFyeShncmlkRXh0cmEpDQpsaWJyYXJ5KGJvb3QpDQoNCg0KDQojIENvbG9yYmxpbmQtZnJpZW5kbHkgcGFsZXR0ZSwgZm91bmQgYXQgDQojIGh0dHA6Ly93d3cuY29va2Jvb2stci5jb20vR3JhcGhzL0NvbG9yc18oZ2dwbG90MikvI2EtY29sb3JibGluZC1mcmllbmRseS1wYWxldHRlDQoNCmNiYlBhbGV0dGUgPC0gYygiI0U2OUYwMCIsICIjNTZCNEU5IiwgIiMwMDlFNzMiLCAiI0YwRTQ0MiIsICIjMDA3MkIyIiwgIiNENTVFMDAiLCAiI0NDNzlBNyIpDQoNCmRmIDwtIHJlYWQuY3N2KCdhMyBjc3YgdmFsdWVzLmNzdicpDQoNCmxhYmVsQ29udmVyc2lvbiA8LSBzZXROYW1lcyhjKCJCYXIiLCAiUGllIiwgIkwiLCAiSCIsICJTIiksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgYygiQmFyIENoYXJ0IiwgIlBpZSBDaGFydCIsICJMdW1pbmFuY2UiLCAiSHVlIiwgIlNhdHVyYXRpb24iKSkNCg0Kc3VtbWFyeUJhckFuZFBpZVBsb3QgPC0gZ2dwbG90KGRmLCBhZXMoeCA9IHJlb3JkZXIodGVzdFR5cGUsZXJyb3IpLCBlcnJvciwgZmlsbD10ZXN0VHlwZSkpICsNCiAgc3RhdF9zdW1tYXJ5KGZ1biA9IG1lYW4sIGdlb20gPSAiYmFyIikgKw0KICBzdGF0X3N1bW1hcnkoZnVuLmRhdGEgPSBtZWFuX2NsX25vcm1hbCwgZ2VvbSA9ICJlcnJvcmJhciIsIGZ1bi5hcmdzID0gbGlzdChtdWx0ID0gMSkpICsNCiAgZ2d0aXRsZSgiTWVhbiBFcnJvciBmb3IgYWxsIFZpc3VhbGl6YXRpb24gVHlwZXMiKSArDQogIHhsYWIoIlZpc3VhbGl6YXRpb24gVHlwZSIpICsNCiAgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSksDQogICAgICAgIGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIikgKw0KICBzY2FsZV9maWxsX21hbnVhbCh2YWx1ZXM9Y2JiUGFsZXR0ZSkgKw0KICBzY2FsZV94X2Rpc2NyZXRlKGJyZWFrcyA9IGMoIkJhciIsICJQaWUiLCAiTCIsICJIIiwgIlMiKSwNCiAgICAgICAgICAgICAgICAgICBsYWJlbHMgPSBjKCJCYXIgQ2hhcnQiLCAiUGllIENoYXJ0IiwgIkx1bWluYW5jZSIsICJIdWUiLCAiU2F0dXJhdGlvbiIpKQ0KDQpwcmludChodG1sdG9vbHM6OnRhZ0xpc3QoZ2dwbG90bHkoc3VtbWFyeUJhckFuZFBpZVBsb3QsIHRvb2x0aXAgPSBjKCJ5IikpKSkNCg0Kc3VtbWFyeUJveFBsb3QgPC0gZ2dwbG90KGRmLCBhZXMoeD1yZW9yZGVyKHRlc3RUeXBlLGVycm9yKSwgeT1lcnJvciwgZmlsbD10ZXN0VHlwZSkpICsNCiAgICAgICAgICAgICAgICAgIGdlb21fYm94cGxvdCgpICsNCiAgICAgICAgICAgICAgICAgIGdndGl0bGUoIkJveCBQbG90IG9mIEVycm9yIGZvciBhbGwgVmlzdWFsaXphdGlvbiBUeXBlcyIpICsNCiAgICAgICAgICAgICAgICAgIHhsYWIoIlZpc3VhbGl6YXRpb24gVHlwZSIpICsNCiAgICAgICAgICAgICAgICAgIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUpLA0KICAgICAgICAgICAgICAgICAgICAgICAgbGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiKSArDQogICAgICAgICAgICAgICAgICBzY2FsZV9maWxsX21hbnVhbCh2YWx1ZXM9Y2JiUGFsZXR0ZSkgKw0KICAgICAgICAgICAgICAgICAgc2NhbGVfeF9kaXNjcmV0ZShicmVha3MgPSBjKCJCYXIiLCAiUGllIiwgIkwiLCAiSCIsICJTIiksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVscyA9IGMoIkJhciBDaGFydCIsICJQaWUgQ2hhcnQiLCAiTHVtaW5hbmNlIiwgIkh1ZSIsICAgICJTYXR1cmF0aW9uIikpDQoNCnByaW50KGh0bWx0b29sczo6dGFnTGlzdChnZ3Bsb3RseShzdW1tYXJ5Qm94UGxvdCkpKQ0KDQpzdW1tYXJ5RGVuc2l0eVBsb3QgPC0gZ2dwbG90KGRmLCBhZXMoeD1lcnJvciwgY29sb3I9dGVzdFR5cGUpKSArIA0KICBnZW9tX2RlbnNpdHkoKSArDQogIGdndGl0bGUoIkRpc3RyaWJ1dGlvbiBvZiBFcnJvciBmb3IgYWxsIFZpc3VhbGl6YXRpb24gVHlwZXMiKSArDQogIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXM9IGMoIiNFNjlGMDAiLCAiI0YwRTQ0MiIsICIjMDA5RTczIiwgIiMwMDcyQjIiLCAiIzU2QjRFOSIpLA0KICAgICAgICAgICAgICAgICAgICAgbGFiZWxzID0gYygiQmFyIENoYXJ0IiwgIlBpZSBDaGFydCIsICJMdW1pbmFuY2UiLCAiSHVlIiwgIlNhdHVyYXRpb24iKSkgKw0KICBndWlkZXMoY29sb3I9Z3VpZGVfbGVnZW5kKHRpdGxlPSJWaXN1YWxpemF0aW9uIFR5cGUiKSkgKw0KICB0aGVtZShwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41KSkNCg0KDQpzdW1tYXJ5RGVuc2l0eVBsb3QNCg0KZm9yICh1bmlxdWVJRCBpbiB1bmlxdWUoZGYkdXNlcklEKSkgew0KDQogIHVzZXJERiA8LSBzdWJzZXQoZGYsIHN1YnNldCA9IHVzZXJJRCA9PSB1bmlxdWVJRCkNCiAgDQogIGlmIChucm93KHVzZXJERikgPj0gMjUpIHsNCiAgDQogICAgdXNlclN1bW1hcnlQbG90IDwtIGdncGxvdCh1c2VyREYsIGFlcyh4PXJlb3JkZXIodGVzdFR5cGUsZXJyb3IpLCB5PWVycm9yLCBmaWxsPXRlc3RUeXBlKSkgKw0KICAgIHN0YXRfc3VtbWFyeShmdW4gPSBtZWFuLCBnZW9tID0gImJhciIpICsNCiAgICBzdGF0X3N1bW1hcnkoZnVuLmRhdGEgPSBtZWFuX2NsX25vcm1hbCwgZ2VvbSA9ICJlcnJvcmJhciIsIGZ1bi5hcmdzID0gbGlzdChtdWx0ID0gMSkpICsNCiAgICBnZ3RpdGxlKHBhc3RlKCJFcnJvciBTdW1tYXJ5IGZvciBVc2VyIiwgdW5pcXVlSUQsIHNlcCA9ICIgIikpICsNCiAgICB4bGFiKCJDaGFydCBUeXBlIikgKw0KICAgIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUpLA0KICAgICAgICAgIGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIikgKw0KICAgIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXM9Y2JiUGFsZXR0ZSkgKw0KICAgIHNjYWxlX3hfZGlzY3JldGUoYnJlYWtzID0gYygiQmFyIiwgIlBpZSIsICJMIiwgIkgiLCAiUyIpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbHMgPSBjKCJCYXIgQ2hhcnQiLCAiUGllIENoYXJ0IiwgIkx1bWluYW5jZSIsICJIdWUiLCAgICAiU2F0dXJhdGlvbiIpKQ0KICANCiAgICBwcmludChodG1sdG9vbHM6OnRhZ0xpc3QoZ2dwbG90bHkodXNlclN1bW1hcnlQbG90LCB0b29sdGlwPWMoInkiKSkpKQ0KICAgIA0KICB9DQp9DQoNCmBgYA0KDQo=